home *** CD-ROM | disk | FTP | other *** search
- *****Listing 3*****
-
- /*
- * keys.c - gets arrow and function keys from termcap,
- * returns terminfo codes
- * changes quit key for use as arrow
- *
- * define NO_SYSV for versions of curses that do not look up
- * arrow & function keys from termcap
- *
- * copyright 1988 Ronald Florence
- * changed VMIN & VTIME for wy99 @ 9600 ron@mlfarm (7/11/88)
- */
-
- #include <curses.h>
- #ifndef KEY_DOWN
- #include "keys.h"
- #endif
-
- #define NKEYS 16
-
- char
- #ifdef NO_SYSV
- *tcap_ids[] = {
- "kd", "ku", "kl", "kr", "kh", "kb",
- "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7", "k8", "k9", 0
- },
- #endif
- *fkeys[NKEYS];
-
- lookupkeys()
- {
- #ifdef NO_SYSV
- static char sbuf[256];
- char **key, tbuf[1024], *fill = sbuf, *tgetstr();
- int i = 0;
-
- tgetent(tbuf, ttytype);
- for (key = tcap_ids; *key; ++key)
- fkeys[i++] = tgetstr(*key, &fill);
- #else
- fkeys[0] = KD;
- fkeys[1] = KU;
- fkeys[2] = KL;
- fkeys[3] = KR;
- fkeys[4] = KH;
- fkeys[5] = KB;
- fkeys[6] = K0;
- fkeys[7] = K1;
- fkeys[8] = K2;
- fkeys[9] = K3;
- fkeys[10] = K4;
- fkeys[11] = K5;
- fkeys[12] = K6;
- fkeys[13] = K7;
- fkeys[14] = K8;
- fkeys[15] = K9;
- #endif
- fixquit();
- }
-
-
- getkey()
- {
- char cmd[6];
- register k;
-
- k = read(0, cmd, 6);
- cmd[k] = '\0';
- for (k = 0; k < NKEYS; k++)
- if (strcmp(cmd, fkeys[k]) == 0)
- return (k + KEY_DOWN);
- return ((int) *cmd);
- }
-
-
- fixquit()
- {
- struct termio new;
-
- ioctl(0, TCGETA, &new);
- new.c_cc[VQUIT] = 0xff; /* in case QUIT is an arrow */
- new.c_cc[VTIME] = 1; /* minimum timeout */
- new.c_cc[VMIN] = 3; /* three characters satisfy */
- ioctl(0, TCSETA, &new);
- }
-